#2输出指定文件夹下有哪些文件和目录（实现ls命令）
# #!/usr/bin/python3
# import os
# u_path = '.'
# dir1 = (os.listdir(u_path))
# for i in dir1:
#     print(i)

#1输入数字n，输出n天前的日期
# from datetime import datetime,timedelta
# n = int(input('请输入您要查询几天前的日期：'))
# now = datetime.now()
# time1 = now - timedelta(days=n)
# print(time1)

# 3>>> lst1 = [28,32,12,3,7,6,34,3,17,7,3]
# >>> lst2 = set(lst1)
# >>> print(lst2)
# {32, 34, 3, 6, 7, 12, 17, 28}
# >>> lst3 = list(lst2)
# >>> print(lst3)
# [32, 34, 3, 6, 7, 12, 17, 28]
# >>> lst3.sort()
# >>> print(lst3)
# [3, 6, 7, 12, 17, 28, 32, 34]


##4在函数内部修改全局变量
#如果在函数中出现global全局变量的名字，那么即使有局部变量和全局变量同名，也认为是对全局变量进行修改，而不是定义局部变量
# def test1():
#     global a
#     a = 100
#     print(a)
#     a =20
#     print(a)
# def test2():
#     print(a)
# test1()
# test2()

#5如何跨模块共享全局变量
# 在单个程序中跨模块共享信息的规范方法是创建一个特殊模块（通常称为config或cfg）。
# 只需在应用程序的所有模块中导入配置模块;
# 然后该模块可用作全局名称。
# 因为每个模块只有一个实例，所以对模块对象所做的任何更改都会反映在任何地方


#6 python基本数据类型：
#int，float，decimal，复数，

##77、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# >>> import random
# >>> random.randint(1,10)
# 1
# >>> random.randint(1,10)
# 2
# >>> random.randint(1,10)
# 6
# >>> random.uniform(1,10)
# 7.985174698294925
# >>> random.uniform(1,10)
# 7.688609452566354
# >>> random.uniform(1,10)
# 9.924176705550346
# >>> random.uniform(0,1)
# 0.4027675181395941
# >>> random.uniform(0,1)
# 0.069803493699654

##8python中可变数据类型和不可变数据类型
#可变数据类型：
#列表，集合
#不可变
#元组


# 10  pep8
#使用四个空格缩进，不使用制表符
#使用空行分隔函数和类
#注释独占一行
#运算符周围和逗号后面使用空格，括号里侧不加空格

#11给定一个字符串找出字符串中第一个重复的字符
# def first_word(str1):
#     if set(str1) == len(str1): # 利用set去重的功能,通过len()函数,判断字符串中是否含有重复元素
#         return None # 如果长度一样,说明字符串中没有重复元素 return None
#     else: # 如果set()去重后与原来的len(str1)长度不一样,说明字符串中含有重复元素
#         for i in range(0,len(str1)): # 遍历字符串,有时候不一定要循环他的元素，有下标的可以根据下标，也可以根据他的长度想办法
#             if str1[i] in str1[i+1:]: # 每一次遍历,取出当前字符,利用in,切片知识,判断当前字符,是否在字符串中,如果存在,立即返回当前字符
#判断你要的字符串有没有在后面也出现，就str[i]是不是会等于str1[i+1:]
#                 return str1[i]
# print(first_word('abhxgjfak'))

#12深浅拷贝
# 对于可变类型而言，浅拷贝将该对象拷贝了一遍，但是并不是对其中所有的数据都货真价实的拷贝了一遍，
# 对于内层的可变类型数据元素，拷贝的是其地址，不是其值，所以说浅拷贝是只复制最外层的结构，除最外层其余的直接将其地址引用过来。
# 即使用浅拷贝操作可变类型数据，相当于将原数据用新内存空间又存了一份，
# 当修改其中的不可变类型数据，拷贝后的对象不会跟着改变，如果修改其中的可变类型对象，拷贝后的对象会跟着一起改变。
# 就是将原对象里面的所有元素全部拿出来然后重新用新的内存空间存储，原对象和拷贝后的对象就没有任何关系了，
# 不管原对象如何改变，拷贝后的对象都不会变，类似人类克隆技术，原对象和新对象就是两个个体，除了最初基因相同，就没有其他关系了。

#13 python内存机制
# 引用计数为主，分代回收和标记清除为辅的垃圾回收方式
# 还引用了小整型缓冲池以及常用字符串驻留区的方式进行内存分配管理


#14使用python实现冒泡排序，快速排序
#
# def bubble_sort(array):
#     for i in range(1, len(array)):
#         for j in range(0, len(array) - i):
#             if array[j] > array[j + 1]:
#                 array[j], array[j + 1] = array[j + 1], array[j]
#     return array
# if __name__ == '__main__':
#     array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
#     print(bubble_sort(array))



#15 验证一个字符串是否属于回文
#判断回文
# str1 = 'goodoog'
# if str1 == str1[::-1]:
#     print('是回文字符串')
# else:
#     print('不是回文字符串')


# 1、要求
# 提取出这个文本里面的ip字段、时间字段、带宽字段
# 每个字段都是以空白作为分割   ip字段在第一个  时间字段在第四个 带宽字段在第10个
#  首先将时间格式都统一转化为 2021-06-04 04:00:20  （time）
#  通过ip 去解析出它的省份和运营商是什么    （requests，json）
#  https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=106.11.159.66
#  isp就是运营商字段   region就是省份字段
#  最后将得到的  时间、省份、运营商、带宽字段都写入文件
#
import json
import requests
from  datetime import datetime

def get_ip_info(ip):
    r = requests.get('https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=%s' % ip)
    if r.json()['code'] == 0:
        i = r.json()['data']
        country = i['country']
        region = i['region']
        isp = i['isp']
        print(f'国家：{country},地区: {region},运营商: {isp}')
        #print(i)
    else:
        print('未查到归属地和运营商')
#get_ip_info("120.25.208.128")
with open('weblog.txt',) as fp:
    lst = []
    for i in fp.readlines():
        lst.append(i.split(" "))
    for i in range(len(lst)):
        ti = datetime.strptime(lst[i][3][1:], '%d/%b/%Y:%H:%M:%S')
        print(f'ip: {lst[i][0]}, 时间：{ti}, 带宽：{lst[i][9]}', end=' ')
        get_ip_info(lst[i][0])
